package com.edu.杂七杂八;

import java.util.ArrayList;
import java.util.List;

/**
 * 演示内存分配策略
 * -Xms20M -Xmx20M -Xmn10M -XX:+UseSerialGC -XX:+PrintGCDetails -verbose:gc -XX:-ScavengeBeforeFullGC
 * -XX:+UseSerialGC 不让幸存区的比例动态调整
 * 幸存区To会一直空着。
 * @作者 five-five
 * @创建时间 2021/5/26
 */
public class 尝试读取JVM日志内容 {
    private static final int _512KB = 512 * 1024;
    private static final int _1MB = 1024 * 1024;
    private static final int _6MB = 6 * 1024 * 1024;
    private static final int _7MB = 7 * 1024 * 1024;
    private static final int _8MB = 8 * 1024 * 1024;

    public static void main(String[] args) throws InterruptedException {
//        List<byte[]> list = new ArrayList<>();
//        list.add(new byte[_7MB]);
//        list.add(new byte[_512KB]);
//        list.add(new byte[_512KB]);
//        list.add(new byte[_8MB]);//新生代和伊甸园区都无法存储该大对象，老年代内存足够的话，直接将该大对象晋升为老年代，不会触发GC
//        list.add(new byte[_8MB]);//即时Full GC，也会java.lang.OutOfMemoryError: Java heap space
        //当内存溢出发生在一个非主线程中，不会影响主线程的运行
        new Thread(() -> {
            ArrayList<byte[]> list = new ArrayList<>();
            list.add(new byte[_8MB]);
            list.add(new byte[_8MB]);
        }).start();
//
        System.out.println("sleep....");
        Thread.sleep(1000L);
    }
}
